/**
 * 日期时间格式化工具
 */

/**
 * 格式化日期时间为 YYYY-MM-DD HH:mm 格式
 * @param {Date} date - 日期对象
 * @returns {string} 格式化后的日期时间字符串
 */
export function formatDateTime(date) {
    if (!(date instanceof Date)) {
        return ''
    }

    const year = date.getFullYear()
    const month = String(date.getMonth() + 1).padStart(2, '0')
    const day = String(date.getDate()).padStart(2, '0')
    const hours = String(date.getHours()).padStart(2, '0')
    const minutes = String(date.getMinutes()).padStart(2, '0')

    return `${year}-${month}-${day} ${hours}:${minutes}`
}

/**
 * 格式化时间为 HH:mm 格式
 * @param {Date} date - 日期对象
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(date) {
    if (!(date instanceof Date)) {
        return ''
    }

    const hours = String(date.getHours()).padStart(2, '0')
    const minutes = String(date.getMinutes()).padStart(2, '0')

    return `${hours}:${minutes}`
}

/**
 * 获取日期部分 (YYYY-MM-DD)
 * @param {Date} date - 日期对象
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date) {
    if (!(date instanceof Date)) {
        return ''
    }

    const year = date.getFullYear()
    const month = String(date.getMonth() + 1).padStart(2, '0')
    const day = String(date.getDate()).padStart(2, '0')

    return `${year}-${month}-${day}`
}

/**
 * 计算两个日期之间的天数差
 * @param {Date} date1 - 第一个日期
 * @param {Date} date2 - 第二个日期
 * @returns {number} 天数差
 */
export function daysBetween(date1, date2) {
    const timeDiff = Math.abs(date2.getTime() - date1.getTime())
    return Math.ceil(timeDiff / (1000 * 60 * 60 * 24))
}

/**
 * 将字符串转换为日期对象
 * @param {string} dateString - 日期字符串 (YYYY-MM-DD 或 YYYY-MM-DD HH:mm)
 * @returns {Date} 日期对象
 */
export function parseDate(dateString) {
    if (!dateString) return null

    // 尝试解析带时间的格式
    const dateTimeParts = dateString.split(' ')
    if (dateTimeParts.length === 2) {
        const [datePart, timePart] = dateTimeParts
        const [year, month, day] = datePart.split('-').map(Number)
        const [hours, minutes] = timePart.split(':').map(Number)
        return new Date(year, month - 1, day, hours, minutes)
    }

    // 尝试解析仅日期的格式
    const dateParts = dateString.split('-').map(Number)
    if (dateParts.length === 3) {
        return new Date(dateParts[0], dateParts[1] - 1, dateParts[2])
    }

    return null
}